package teste;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;


import br.com.caelum.dao.AlunoDAO;
import br.com.caelum.model.Aluno;
import br.com.caelum.model.Matricula;
import br.com.caelum.model.Turma;

import org.hibernate.Session;

public class TesteMocks {

	@Before
	public void init(){
				
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void test() {
		
		//Criacao dos MOCKS que serao usados
		AlunoDAO alunoDAO = mock(AlunoDAO.class);
		//Session session = mock(Session.class);
		Matricula matriculateste = mock(Matricula.class);
		List<Matricula> matriculas = new ArrayList<Matricula>();
		List<Matricula> matriculas2 = new ArrayList<Matricula>();
		Turma turma = mock(Turma.class);
		Aluno aluno = mock(Aluno.class);
		
		MockitoAnnotations.initMocks(this);
		//alunoDAO = new AlunoDAO(session);
		//matriculas = new ArrayList<Matricula>();
		//matriculateste = new Matricula();
		//turma = new Turma();
		//aluno = new Aluno();
				
		//Criando os campos do mock Aluno que serao usados
		aluno.setPeriodo(1);
		
		//Criando os campos do mock Turma que serao usados
		turma.setCh(40);
		
		//Criando os campos do mock Matricula que serao usados
		matriculateste.setMedia(new BigDecimal (7));
		matriculateste.setAluno(aluno);
		matriculateste.setPeriodo(1);
		matriculateste.setTurma(turma);
					
		//Adiciona o mock Matricula no mock lista de matriculas
		matriculas.add(matriculateste);				
		matriculas2.add(matriculateste);	
		
		BigDecimal[] testecre = new BigDecimal[2];
		testecre[0] = new BigDecimal(8);
		testecre[1] = new BigDecimal(7);
		when(alunoDAO.calculaCRE(matriculas)).thenReturn(testecre);
		BigDecimal[] testecre2 = alunoDAO.calculaCRE(matriculas2);
		assertEquals(testecre[0], testecre2[0]);
		assertEquals(testecre[1], testecre2[1]);
		System.out.println(testecre[0]);
		System.out.println(testecre2[0]);
		System.out.println(testecre[1]);
		System.out.println(testecre2[1]);
		//verify(alunoDAO, times(1)).calculaCRE(matriculas);
	}

}
